﻿using System;
using System.Collections.Generic;
using System.Linq;

namespace LWH.ByteProtocol
{
    /// <summary>
    /// 类似于父节点的作用，可以包含一个或多个子属性
    /// </summary>
    public abstract class OwnerProperty:SkeletalProperty
    {
        public OwnerProperty(OwnerProperty ownerProperty) : base(ownerProperty)
        {
        }

        /// <summary>
        /// 根据每个属性长度和排列顺序计算指定属性数据起始位置
        /// </summary>
        /// <param name="property">指定属性</param>
        /// <returns>指定属性数据起始位置</returns>
        protected internal abstract int getPropertyOffset(AbstractProperty property);

        /// <summary>
        /// 添加属性，必需调用此方法以声明一个属性是自己的子属性
        /// 一般在此方法中更新子属性的index
        /// 每个属性只能有一个父属性
        /// </summary>
        /// <param name="property">属性</param>
        public abstract void addProperty(AbstractProperty property);
    }
}
